package day5;

import java.util.Scanner;

public class Main2 {
    /**
     * 四个选项
     * https://ac.nowcoder.com/acm/problem/202493
     */
    public static int[] cnt = new int[5]; // 填写
    public static int[] path = new int[13]; // 统计 12 个选项都是什么
    public static int ret; // 返回值
    public static boolean[][] same = new boolean[13][13]; //进行记录哪两个是相同的

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        for(int i = 1;i <= 4;i++) {
            cnt[i] = in.nextInt();
        }
        int m = in.nextInt();
        while(m-- != 0) {
            int x = in.nextInt();
            int y = in.nextInt();
            same[x][y] = same[y][x] = true;
        }

        dfs(1); // 递归
        System.out.println(ret);
    }

    public static void dfs(int pos) {
        if(pos > 12) {
            ret++;
            return;
        }

        // 每一个的位置存在4个选项。进行遍历
        for(int i = 1;i <= 4;i++) {
            // 进行两次判断进行剪枝
            if(cnt[i] == 0) {
                // 说明这个对应的选项没有了，不能进行放入这个选项，直接剪枝
                continue;
            }
            if(!isSame(pos,i)) {
                // 这个pos和i位置鹅数据，需要放入相同的但是没有放入相同的数据，直接进行剪枝
                continue;
            }
            // 可以进行放入
            path[pos] = i;
            cnt[i]--;
            dfs(pos + 1);
            // 回溯
            path[pos] = 0;
            cnt[i]++;
        }
    }

    public static boolean isSame(int pos,int cur) {
        for(int i = 1;i < pos;i++) {
            if(same[pos][i] && path[i] != cur) {
                return false;
            }
        }
        return true;
    }
}
